package com.sss.hloster0305;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

import org.junit.jupiter.api.Test;

public class TestDriver {

	/**
	 * 通过反射机制中获取一个类中的所有属性，并对该属性进行操作处理
	 */

	@Test
	public void test03() {
		// 实例变量名
		try {
			Class c = Class.forName("com.sss.hloster0305.Student");
			Student dent = (Student) c.newInstance();
			Field ft = c.getDeclaredField("stuName");
			ft.setAccessible(true);
			ft.set(dent, "张三");
			System.out.println("反射操作之后的stuName的值为：" + ft.get(dent));
			System.out.println("反射操作之后的stuName的值为：" + ft.getName());

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 从反射机制中获取一个类的所有属性列表
	 */
	@Test
	public void test02() {
		// 获取Class 类对象
		// 1.类名：class 获取
		try {
			Class<?> c1 = Class.forName("com.sss.hloster0305.Student");
			Field[] fields = c1.getDeclaredFields();
			// 通过Field类打印所有的属性列表
			for (Field f : fields) {
				// f变量中是每个属性的封装对象，包含了该属性的所有信息
				System.out.println(Modifier.toString(f.getModifiers()) + "   " + f.getType().getSimpleName() + "   "
						+ f.getName() + ";");
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}

	}

	/**
	 * 获取反射机制中的Class对象
	 */
	@Test
	public void test01() {
		// 1.类名：class 获取
		Class<Student> clazz = Student.class;
		// 2.实例变量名.getClass()
		Student stu0 = new Student();
		// 获取Class 对象
		Class clazz1 = stu0.getClass();
		// 3.Class类提供一个forName的静态方法（反射方式），Class.forName

		try {
			Class clazz02 = Class.forName("com.sss.hloster0305.Student");
		} catch (ClassNotFoundException e) {

			e.printStackTrace();
		}
	}
}
